﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using AG.Modulos.AdministracionTaquilla.Contratos;
using AG.Modulos.AdministracionTaquilla.Presentadores;
using System.Data;

namespace WebSite.AdministracionTaquilla
{
    public partial class GestionarProducto : Page, IGestionarProducto
    {

        private PresentadorGestionarProducto _presentador;

        #region Propiedades


        #region Propiedades para AGREGAR un producto

        //Nombre del producto
        public string Nombre
        {
            get { return tbNombre.Text; }
        }

        //Descripcion del producto
        public string Descripcion
        {
            get { return tbDescripcion.Text; }
        }

        //Cantidad de productos a publicar
        public string CantidadDeProductos
        {
            get { return tbCantidad.Text; }
        }

        // costo del producto a publicar (precio en tickets)
        public string ValordTicketsDelProducto
        {
            get { return tbValorEnTickets.Text; }
        }


        public FileUpload ProductoImagen
        {
            get { return fuProductoImagen; }
        }


        #endregion

        #region Propiedades para CONSULTAR productos

        // gridview donde se muestran todos los productos obtenidos desde el dataset
        public GridView ListaProductos
        {
            get { return gvListaProductos; }
        }

        //Status posibles que tienen los productos
        public DropDownList StatusProductoDDL
        {
            get { return ddlStatusDeProductos; }
        }

        #endregion

        #region Propiedades para Modificar un producto

        //nombre del producto a modificar
        public string NombreAModificar
        {
            get { return tbNombreMod.Text; }
            set { tbNombreMod.Text = value; }
        }

        //descripcion del producto a modificar
        public string DescripcionAModificar
        {
            get { return tbDescripcionMod.Text; }
            set { tbDescripcionMod.Text = value; }
        }

        //cantidad de productos a modificar(numero)
        public string CantidadDeProductosAModificar
        {
            get { return tbCantidadMod.Text; }
            set { tbCantidadMod.Text = value; }
        }

        //costo del producto a modificar(en tickets)
        public string ValordTicketsDelProductoAModificar
        {
            get { return tbValorTicketMod.Text; }
            set { tbValorTicketMod.Text = value; }
        }

        //cantidad de productos vendidos
        public string CantidadProductosCanjeados
        {
            get { return tbProductosVendidos.Text; }
            set { tbProductosVendidos.Text = value; }
        }

        public DropDownList StatusProductoDDLAModificar
        {
            get { return ddlStatusDeProductoMod; }
            set { ddlStatusDeProductoMod = value; }
        }

        public Image ImagenModificar
        {
            get { return imProductoMod; }
            set { imProductoMod = value; }
        }


        #endregion

        //DATA SET que contiene todos los productos del sistema
        public DataSet SessionListaDeProductos
        {
            get { return (DataSet)Session[@"ListaDeProductos"]; }
            set { Session[@"ListaDeProductos"] = value; }
        }

        public object SessionDeProducto
        {
            get { return (object)Session[@"Producto"]; }
            set { Session[@"Producto"] = value; }
        }

        #endregion

        #region Eventos


        protected void Page_Load(object sender, EventArgs e)
        {
            
          _presentador = new PresentadorGestionarProducto(this);
        }

        protected void Page_Init(object sender, EventArgs e)
        {
            mvGestionarProducto.SetActiveView(vGestionarProductoVentanaPrincipal);
        }

        /// <summary>
        /// Evento que ocurre al darle click al boton de agregar un nuevo producto
        /// Muestra el formulario para agregar un nuevo producto a la taquilla
        /// </summary>
        protected void btnNuevoProducto_Click(object sender, EventArgs e)
        {
            lbTitulo.Text = App_GlobalResources.AG.EtiquetaAgregarProductos;
            mvGestionarProducto.SetActiveView(vNuevoProducto);
            
        }

        /// <summary>
        /// Evento que ocurre al darle click al boton de modificar un producto
        /// Muestra los productos con estado activo
        /// </summary>
        protected void btnConsultarrProducto_Click(object sender, EventArgs e)
        {
                lbTitulo.Text = App_GlobalResources.AG.EtiquetaConsultarProductos;
                _presentador.CargarStatusProductos();
                _presentador.IrConsultarProductos();
                mvGestionarProducto.SetActiveView(vConsultarProductos);
        }

        #region Enventos para AGREGAR un producto


        /// <summary>
        /// Evento que ocurre al darle click al boton de aceptar
        /// Muestra valida los campos llenos y si son correctos guarda en bd
        /// </summary>
        protected void btnAceptar_Click(object sender, EventArgs e)
        {
            _presentador.Aceptar();
        }

        protected void btnRegresar_Click(object sender, EventArgs e)
        {
            mvGestionarProducto.SetActiveView(vGestionarProductoVentanaPrincipal);
        }

        #endregion

        #region Eventos para CONSULTAR Productos

        /// <summary>
        /// Evento que se activa al seleccionar una fila del gridView
        /// </summary>
        protected void gvListaProductos_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (null != ListaProductos.SelectedDataKey)
            {
                _presentador.IrModificarProducto(ListaProductos.SelectedDataKey.Value.ToString());
                mvGestionarProducto.SetActiveView(vModificarProducto);
                lbTitulo.Text = App_GlobalResources.AG.EtiquetaModificarProductos;
            }
        }

        /// <summary>
        /// Evento que se activa al cambiar el item del dropDownList
        /// </summary>
        protected void ddlStatusDeProductos_SelectedIndexChanged(object sender, EventArgs e)
        {
            _presentador.FiltrarListaDeProductosPorStatus();
        }

        /// <summary>
        /// evento que maneja la paginacion
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void gvListaProductos_DataBound(object sender, EventArgs e)
        {
            ConfigurarControles();
        }

        /// <summary>
        /// boton que permite la navegacion hacia atras en el gridView de consulta
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnAnt_Click(object sender, EventArgs e)
        {
            if (gvListaProductos.PageIndex > 0)
                gvListaProductos.PageIndex--;
            gvListaProductos.DataSource = SessionListaDeProductos;
            gvListaProductos.DataBind();
            ConfigurarControles();
            _presentador.AjustarTamanoGridView();
        }

        /// <summary>
        /// boton que permite la navegacion hacia adelante en el gridView de consulta
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnSig_Click(object sender, EventArgs e)
        {
            if (gvListaProductos.PageIndex < gvListaProductos.PageCount)
                gvListaProductos.PageIndex++;
            gvListaProductos.DataSource = SessionListaDeProductos;
            gvListaProductos.DataBind();
            ConfigurarControles();
            _presentador.AjustarTamanoGridView();
        }


        #endregion




        #region Region Eventos MODIFICAR producto

        protected void BotonModificar_Click(object sender, EventArgs e)
        {
            _presentador.Modificar();
        }

        protected void BotonRegresarMod_Click(object sender, EventArgs e)
        {
            mvGestionarProducto.SetActiveView(vConsultarProductos);
        }
        #endregion

        #endregion

        #region Metodos


        /// <summary>
        /// metodo que configura el paginado del gridview
        /// </summary>
        protected void ConfigurarControles()
        {
            int productos = (gvListaProductos.PageIndex + 1) * gvListaProductos.PageSize;
            if (productos > ((DataSet)gvListaProductos.DataSource).Tables[0].Rows.Count)
                productos = ((DataSet) gvListaProductos.DataSource).Tables[0].Rows.Count;
            
            lbInfoPaginado.Visible = gvListaProductos.PageCount >= 1;
            if (gvListaProductos.DataSource != null)
                lbInfoPaginado.Text = string.Format(App_GlobalResources.AG.EtiquetaFormatoPaginado,
                    gvListaProductos.PageIndex + 1, gvListaProductos.PageCount,productos,
                    ((DataSet)gvListaProductos.DataSource).Tables[0].Rows.Count);
            btnAnt.Visible = (gvListaProductos.PageIndex > 0);
            btnSig.Visible = (gvListaProductos.PageIndex < gvListaProductos.PageCount - 1) && (gvListaProductos.PageCount > 1);
           // lblNPag.Visible = gvListaProductos.Rows.Count == 0;

        }



        #endregion












    }
}